import observe from "./observe";

// 定义一个函数，实现对对象的属性的响应式处理
export default function defineReactive(data, key, val) {
  // 如果定义成响应式的时候没有初始化值，则返回对象原来的值
  if ([...arguments].length === 2) {
    val = data[key];
  }

  observe(val)
  
  Object.defineProperty(data, key, {
    enumerable: true,
    configurable: true,
    get() {
      console.log(`获取${key}属性`);
      return val;
    },
    set(newVal) {
      console.log(`设置${key}属性，值为${newVal}`);
      observe(newVal)
      if (newVal !== val) {
        val = newVal;
      }
    },
  });
}
